﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Ubatic.Contracts.Contracts;
using Ubatic.Contracts.Services;
using Ubatic.Common.Dto;
using Ubatic.Ui.Web.Classes;
using Ubatic.Ui.Web.Code;

namespace Ubatic.Ui.Web.Pages
{
    public partial class ProyectrosDetalleMiembrosEquipo : BasePage
    {
        public ProyectoEquipo proyectoCurrent
        {
            get
            {
                return (ProyectoEquipo)ViewState["Proyecto"];
            }
            set
            {
                ViewState["Proyecto"] = value;
            }
        }

        ISecurityService SecurityService;
        IAdminProyectoService AdminProyectoService;
        Usuario usuario;

        protected void Page_Load(object sender, EventArgs e)
        {
            //HasPermissionToSeeMe(PlanProdSecurity.TEMPORADA_VER);

            try
            {
                SecurityService = ServiceFactory.GetSecurityService();
                AdminProyectoService = ServiceFactory.GetAdminProyectoService();
                usuario = SecurityService.GetUserByEmail(Context.User.Identity.Name);

                if (!this.IsPostBack)
                {
                    if (this.Request.QueryString["Id"] == null)
                    {
                        proyectoCurrent = new ProyectoEquipo();
                    }
                    else
                    {
                        proyectoCurrent = AdminProyectoService.GetProyectoEquipo(new ServiceOptions(), Convert.ToInt32(this.Request.QueryString["Id"]));
                    }

                    FillCombos();

                    Bind();
                }
            }
            catch (Exception ex)
            {
                ExceptionManager.Instance.HandleException(ex);
            }
        }

        private List<MaestroBaseCargo> _Cargos;
        private List<MaestroBaseCargo> Cargos
        {
            get
            {
                if (_Cargos == null)
                {
                    _Cargos = AdminProyectoService.GetCargos();
                }

                return _Cargos;
            }
        }

        private List<MaestroBase> _UnidadAcademica;
        private List<MaestroBase> UnidadAcademica
        {
            get
            {
                if (_UnidadAcademica == null)
                {
                    _UnidadAcademica = AdminProyectoService.GetUnidadesAcademicas();
                }

                return _UnidadAcademica;
            }
        }

        private List<MaestroBaseCargo> _CargoDedicacion;
        private List<MaestroBaseCargo> CargoDedicacion
        {
            get
            {
                if (_CargoDedicacion == null)
                {
                    _CargoDedicacion = AdminProyectoService.GetCargoDedicaciones();
                }

                return _CargoDedicacion;
            }
        }

        private List<MaestroBase> _RolEnProyecto;
        private List<MaestroBase> RolEnProyecto
        {
            get
            {
                if (_RolEnProyecto == null)
                {
                    _RolEnProyecto = AdminProyectoService.GetRolEnProyecto();
                }

                return _RolEnProyecto;
            }
        }

        private void FillCombos()
        {
            List<MaestroBase> experiencia = AdminProyectoService.GetExperienciaEnTIC();
            UIHelper.LoadCbo(experiencia, this.lstExperienciaEqupoEnTIC, string.Empty);
        }

        //protected override void ApplySecurity()
        //{
        //    this.lnkGuardar.Visible = HasPermissionFor(PlanProdSecurity.TEMPORADA_EDITAR);
        //}

        protected void GridProyectoMiembros_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            try
            {
                if (e.CommandName == "editar")
                {
                    int proyectoMiembroId = Convert.ToInt32(this.GridProyectoMiembros.DataKeys[Convert.ToInt32(e.CommandArgument)].Value);
                    this.Response.Redirect(string.Format("/Pages/ProyectoMiembroEditar.aspx?ProyectoId={0}&Id={1}", proyectoCurrent.Id, proyectoMiembroId), true);
                }
                else if (e.CommandName == "eliminar")
                {
                    int proyectoMiembroId = Convert.ToInt32(this.GridProyectoMiembros.DataKeys[Convert.ToInt32(e.CommandArgument)].Value);
                    AdminProyectoService.EliminarProyectoMiembro(proyectoMiembroId);
                    Bind();
                }
            }
            catch (Exception ex)
            {
                ExceptionManager.Instance.HandleException(ex);
            }
        }

        protected void GridProyectoMiembros_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            //try
            //{
            //    this.GridProyectoMiembros.PageIndex = e.NewPageIndex;


            //}
            //catch (Exception ex)
            //{
            //    ExceptionManager.Instance.HandleException(ex);
            //}
        }

        protected void GridProyectoMiembros_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            try
            {
                if (e.Row.RowType == DataControlRowType.DataRow)
                {
                    e.Row.Cells[0].Attributes.Add("title", "Editar");
                    e.Row.Cells[1].Attributes.Add("title", "Eliminar");
                    ProyectoMiembro proyectoMiembro = (ProyectoMiembro)e.Row.DataItem;
                    ImageButton btnEliminarCtrl = (ImageButton)e.Row.FindControl("btnEliminar");
                    btnEliminarCtrl.OnClientClick = "return confirm('Está seguro que desea eliminar el siguiente registro?')";
                    MaestroBaseCargo cargo = Cargos.Where(c => c.Id == proyectoMiembro.CargoId).SingleOrDefault();
                    MaestroBase unidadAcademica = UnidadAcademica.Where(u => u.Id == proyectoMiembro.UnidadAcademicaId).SingleOrDefault();
                    MaestroBaseCargo cargoDedicacion = CargoDedicacion.Where(c => c.Id == proyectoMiembro.CargoDedicacionId).SingleOrDefault();
                    MaestroBase rolEnProyecto = RolEnProyecto.Where(u => u.Id == proyectoMiembro.RolEnProyectoId).SingleOrDefault();

                    if (cargo != null)
                    {
                        e.Row.Cells[5].Text = cargo.Nombre;
                    }

                    if (unidadAcademica != null)
                    {
                        e.Row.Cells[6].Text = unidadAcademica.Nombre;
                    }

                    if (cargoDedicacion != null)
                    {
                        e.Row.Cells[7].Text = cargoDedicacion.Nombre;
                    }

                    if (rolEnProyecto != null)
                    {
                        e.Row.Cells[8].Text = rolEnProyecto.Nombre;
                    }
                }
            }
            catch (Exception ex)
            {
                ExceptionManager.Instance.HandleException(ex);
            }
        }

        private void Bind()
        {
            if (proyectoCurrent.Id != 0)
            {
                this.txtId.Text = Convert.ToString(proyectoCurrent.Id);

                if (proyectoCurrent.Individual.HasValue)
                {
                    this.chkEsProyectoIndividual.Checked = proyectoCurrent.Individual.Value;
                }

                this.txtExpEquipoEnTIC.Text = proyectoCurrent.ExpEquipoEspecificaEnTIC;
                this.txtExpEquipoEnTICOtro.Text = proyectoCurrent.ExpEquipoEspecificaEnTICTipadaOtra;
                this.txtOtrosEquiposRelacionados.Text = proyectoCurrent.EquiposRelacionados;

                foreach (ListItem item in lstExperienciaEqupoEnTIC.Items)
                {
                    item.Selected = this.proyectoCurrent.ExpEquipoEspecificaEnTICTipada.Where(u => u.ToString() == item.Value).Count() == 1;
                }

                List<ProyectoMiembro> miembros = AdminProyectoService.GetMiembrosEquipoDelProyecto(proyectoCurrent.Id);
                if (miembros != null)
                {
                    this.GridProyectoMiembros.DataSource = miembros;
                    this.GridProyectoMiembros.DataBind();
                }
            }
        }

        private void SetData()
        {
            if (!String.IsNullOrEmpty(this.txtId.Text))
            {
                proyectoCurrent.Id = Convert.ToInt32(this.txtId.Text);
            }

            proyectoCurrent.Individual = this.chkEsProyectoIndividual.Checked;

            proyectoCurrent.ExpEquipoEspecificaEnTIC = this.txtExpEquipoEnTIC.Text;
            proyectoCurrent.ExpEquipoEspecificaEnTICTipadaOtra = this.txtExpEquipoEnTICOtro.Text;
            proyectoCurrent.EquiposRelacionados = this.txtOtrosEquiposRelacionados.Text;

            proyectoCurrent.ExpEquipoEspecificaEnTICTipada.Clear();

            foreach (ListItem item in lstExperienciaEqupoEnTIC.Items)
            {
                if (item.Selected)
                {
                    proyectoCurrent.ExpEquipoEspecificaEnTICTipada.Add(Convert.ToInt32(item.Value));
                }
            }
        }

        private void Save()
        {
            proyectoCurrent = AdminProyectoService.SaveProyectoEquipo(proyectoCurrent);
        }

        private bool Validar()
        {
            //if (temporadaCurrent.FechaDesde > temporadaCurrent.FechaHasta)
            //{
            //    this.masterPage.ShowMessage("La fecha desde debe ser menor a la fecha hasta", WebMessageType.Error);
            //    return false;
            //}

            return true;
        }

        protected void lnkAgregarNuevoMiembro_Click(object sender, EventArgs e)
        {
            try
            {
                this.Response.Redirect(string.Format("/Pages/ProyectoMiembroEditar.aspx?ProyectoId={0}", proyectoCurrent.Id), true);
            }
            catch (Exception ex)
            {
                ExceptionManager.Instance.HandleException(ex);
            }
        }

        protected void lnkGuardar_Click(object sender, EventArgs e)
        {
            try
            {
                SetData();
                if (Validar())
                {
                    Save();
                }

                ShowMessage("Los datos fueron grabados con éxito", WebMessageType.Notification);
            }
            catch (Exception ex)
            {
                ExceptionManager.Instance.HandleException(ex);
            }
        }

        protected void lnkCancelar_Click(object sender, EventArgs e)
        {
            try
            {
                Response.Redirect("/Pages/ProyectosListado.aspx", true);
            }
            catch (Exception ex)
            {
                ExceptionManager.Instance.HandleException(ex);
            }
        }
    }
}